/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.demos.cinepantin;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

import fr.demos.cinepantin.enumerate.Anciennete;
import fr.demos.cinepantin.enumerate.Categorie;
import fr.demos.cinepantin.enumerate.Tva;
import fr.demos.cinepantin.exception.StockException;

/**
 * 
 * @author 
 */

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Article implements Serializable {

 private static final long serialVersionUID = 1L;
	
	
	
	@Id @GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	private String titre;
	private String resume;

	@Enumerated(EnumType.STRING)
	private Anciennete anciennete;
	
	private int anneeDeSortie;

	@Enumerated(EnumType.STRING)
	private Tva tva;
	@Enumerated(EnumType.STRING)
	private Categorie categorie;
	//
	// @OneToMany()
	// @JoinTable(name = "article_attribut", joinColumns = @JoinColumn(name =
	// "idArticle"), inverseJoinColumns = @JoinColumn(name = "idAttribut"))
	// private List<Attribut> attributs;

	private double prixVente;
	@Max(value=10000)@Min(value=0)
	private int stock;

	protected Article() {
	}

	public Article(int id, String titre, String resume,
			Anciennete anciennete, int anneeDeSortie, Tva tva,
			Categorie categorie, double prixVente, int stock) {
		this(titre, resume, anciennete, anneeDeSortie, tva, categorie, prixVente, stock);
		this.id = id;
		
	}

	public Article(String titre, String resume, Anciennete anciennete,
			int anneeDeSortie, Tva tva, Categorie categorie,double prixVente, int stock) {
		this.titre = titre;
		this.resume = resume;
		this.anciennete = anciennete;
		this.anneeDeSortie = anneeDeSortie;
		this.tva = tva;
		this.categorie=categorie;
		this.prixVente = prixVente;
		this.stock = stock;
	}
	


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((anciennete == null) ? 0 : anciennete.hashCode());
		result = prime * result + anneeDeSortie;
		result = prime * result
				+ ((categorie == null) ? 0 : categorie.hashCode());
		result = prime * result + id;
		long temp;
		temp = Double.doubleToLongBits(prixVente);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + ((resume == null) ? 0 : resume.hashCode());
		result = prime * result + stock;
		result = prime * result + ((titre == null) ? 0 : titre.hashCode());
		result = prime * result + ((tva == null) ? 0 : tva.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		System.out.println("edssdfsdfdfds");
		System.out.println(((Article) obj).getId());
		System.out.println(this.id);
		if(this.getClass() == obj.getClass() && this.id == ((Article) obj).getId()){
			return true;
		}else{
			return false;
		}
//		if (this == obj)
//			return true;
//		if (obj == null)
//			return false;
//		if (getClass() != obj.getClass())
//			return false;
//		Article other = (Article) obj;
//		if (anciennete != other.anciennete)
//			return false;
//		if (anneeDeSortie != other.anneeDeSortie)
//			return false;
//		if (categorie != other.categorie)
//			return false;
//		if (id != other.id)
//			return false;
//		if (Double.doubleToLongBits(prixVente) != Double
//				.doubleToLongBits(other.prixVente))
//			return false;
//		if (resume == null) {
//			if (other.resume != null)
//				return false;
//		} else if (!resume.equals(other.resume))
//			return false;
//		if (stock != other.stock)
//			return false;
//		if (titre == null) {
//			if (other.titre != null)
//				return false;
//		} else if (!titre.equals(other.titre))
//			return false;
//		if (tva != other.tva)
//			return false;
//		return true;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getStock() {
		return stock;
	}

	public void setStock(int stock) {
		this.stock = stock;
	}

	public Tva getTva() {
		return tva;
	}

	public void setTva(Tva tva) {
		this.tva = tva;
	}

	public String getTitre() {
		return titre;
	}

	public void setTitre(String titre) {
		this.titre = titre;
	}

	public String getResume() {
		return resume;
	}

	public void setResume(String resume) {
		this.resume = resume;
	}

	public Anciennete getAnciennete() {
		return anciennete;
	}

	public void setAnciennete(Anciennete anciennete) {
		this.anciennete = anciennete;
	}
	
	


	public int getAnneeDeSortie() {
		return anneeDeSortie;
	}

	public void setAnneeDeSortie(int anneeDeSortie) {
		this.anneeDeSortie = anneeDeSortie;
	}

  
	public void retirerDuStock(int nbStock) throws StockException {
		if (nbStock > this.stock) {
			throw new StockException(this, this.stock, nbStock);
		}
		this.stock -= nbStock;
	}

	public void rajouterAuStock(int nbStock) {
		this.stock += nbStock;
	}

	public Categorie getCategorie() {
		return categorie;
	}

	public void setCategorie(Categorie categorie) {
		this.categorie = categorie;
	}

	public double getPrixVente() {
		return prixVente;
	}

	public void setPrixVente(double prixVente) {
		this.prixVente = prixVente;
	}
	

	@Override
	public String toString() {
		return "Article [id=" + id + ", titre=" + titre + ", resume=" + resume
				+ ", anciennete=" + anciennete + ", anneeDeSortie="
				+ anneeDeSortie + ", tva=" + tva + ", categorie=" + categorie
				+ ", prixVente=" + prixVente + ", stock=" + stock + "]";
	}

	
}
